package Frames_juego;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import Frames_juego.efectos.JGradientButton;
import Frames_juego.efectos.explode;
import Juego.Juego;






import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;















import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;


/**frame de menues e informacion
 * 
 * @author Javier Graff
 * @author Eric Avondet
 * @author Rodrigo Herrera
 *
 */
@SuppressWarnings("serial")
public class Principal extends JFrame {

	private JPanel panel_victoria;
	private JPanel contentPane;
	private JPanel panelInicial;
	private JPanel panel_selec_niv;
	private JPanel panel_naves;
	private int dificultad; //nivel 1,2 o 3
	private int tanque; //tanque 1 o 2
	private JEditorPane editorPane;
	private JPanel panel_derrota;
	
	
	private JLabel lblNewLabeld;
	private JLabel lblNewLabel_1d ;
	private JLabel lblNewLabel_2d;
	private JEditorPane editorPaned;
	private JLabel lblNewLabel;
	private JLabel lblNewLabel_1;
	private JLabel lblNewLabel_2;
	private JButton boton_nuevojuego;
	private String nombre_record;
	private int puntaje_record;
	private String nombre_jug_actual;

	
	/**
	 * Create the frame.
	 */
	public Principal() {
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		puntaje_record=0;
		nombre_record="";
		
		contentPane = new JPanel();
		contentPane.setLayout(null);
		contentPane.setBackground(Color.black);
		contentPane.setPreferredSize(new Dimension(600, 400));
		setContentPane(contentPane);
		this.pack();
		
		centrar_pantalla();
		crearpaneles();
		
		contentPane.add(panelInicial);
		
	}
	
	/**
	 * centra el juego en la pantalla
	 */
	public void centrar_pantalla()
	{
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		int y = (int) dim.getHeight()/2;
		int x = (int) dim.getWidth()/2;
		y-=contentPane.getHeight()/2;
		x-=contentPane.getWidth()/2;
		
		this.setLocation(x,y);
	}
	
	
/**
 * crea e inicializa todos los paneles
 */
	private void crearpaneles()
	{
		//panel victoria
		{
			panel_victoria = new JPanel();
			panel_victoria.setLayout(null);
			panel_victoria.setBounds(0, 0, 600, 400);
			
			
			
			JLabel lblVictoria = new JLabel("V I C T O R I A");
			lblVictoria.setHorizontalAlignment(SwingConstants.CENTER);
			lblVictoria.setFont(new Font("Aharoni", Font.PLAIN, 69));
			lblVictoria.setBounds(26, 21, 524, 90);
			panel_victoria.add(lblVictoria);
			
			JLabel lblPuntaje = new JLabel("Puntaje ");
			lblPuntaje.setHorizontalAlignment(SwingConstants.CENTER);
			lblPuntaje.setFont(new Font("Tahoma", Font.PLAIN, 30));
			lblPuntaje.setBounds(26, 139, 136, 60);
			panel_victoria.add(lblPuntaje);
			
			lblNewLabel = new JLabel("New label");
			lblNewLabel.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel.setBounds(172, 158, 117, 39);
			panel_victoria.add(lblNewLabel);
			
			JLabel lblImpactos = new JLabel("IMPACTOS");
			lblImpactos.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblImpactos.setHorizontalAlignment(SwingConstants.CENTER);
			lblImpactos.setBounds(172, 119, 117, 28);
			panel_victoria.add(lblImpactos);
			
			lblNewLabel_1 = new JLabel("New label");
			lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel_1.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabel_1.setBounds(299, 158, 117, 39);
			panel_victoria.add(lblNewLabel_1);
			
			JLabel lblBalasRecibidas = new JLabel("BALAS RECIBIDAS");
			lblBalasRecibidas.setHorizontalAlignment(SwingConstants.CENTER);
			lblBalasRecibidas.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblBalasRecibidas.setBounds(299, 119, 117, 28);
			panel_victoria.add(lblBalasRecibidas);
			
			JLabel lblTotal = new JLabel("TOTAL");
			lblTotal.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblTotal.setHorizontalAlignment(SwingConstants.CENTER);
			lblTotal.setFont(new Font("Tahoma", Font.PLAIN, 20));
			lblTotal.setBounds(426, 119, 124, 28);
			panel_victoria.add(lblTotal);
			
			lblNewLabel_2 = new JLabel("New label");
			lblNewLabel_2.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel_2.setBounds(426, 158, 124, 39);
			panel_victoria.add(lblNewLabel_2);
			
			JButton btnMenuInicial = new JButton("Menu Inicial");
			btnMenuInicial.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					cambiarPanel(panel_victoria,panelInicial);
					boton_nuevojuego.setEnabled(false);
				}
			});
			btnMenuInicial.setBounds(26, 242, 192, 121);
			panel_victoria.add(btnMenuInicial);
			
			JLabel lblRecordsJuegoActual = new JLabel("Record Juego Actual");
			lblRecordsJuegoActual.setHorizontalAlignment(SwingConstants.CENTER);
			lblRecordsJuegoActual.setFont(new Font("Tahoma", Font.PLAIN, 18));
			lblRecordsJuegoActual.setBounds(275, 216, 275, 22);
			panel_victoria.add(lblRecordsJuegoActual);
			
			editorPane = new JEditorPane();
			editorPane.setBounds(275, 242, 275, 40);
			panel_victoria.add(editorPane);
			
			JLabel lblfondo = new JLabel();
			lblfondo.setBounds(0, 0, panel_victoria.getWidth(), panel_victoria.getHeight());
			lblfondo.setIcon(new ImageIcon(getClass().getResource("/Imagenes/fondos/fondo_sel_tan.jpg")));
			panel_victoria.add(lblfondo);
		}
		//PANEL DERROTA
		{
			panel_derrota= new JPanel();
			panel_derrota.setBounds(0, 0, 600, 400);
			panel_derrota.setLayout(null);
			
			
			
			JLabel lblDerrota = new JLabel("D E R R O T A");
			lblDerrota.setHorizontalAlignment(SwingConstants.CENTER);
			lblDerrota.setFont(new Font("Aharoni", Font.PLAIN, 69));
			lblDerrota.setBounds(26, 21, 524, 90);
			panel_derrota.add(lblDerrota);
			
			JLabel lblPuntajed = new JLabel("Puntaje ");
			lblPuntajed.setHorizontalAlignment(SwingConstants.CENTER);
			lblPuntajed.setFont(new Font("Tahoma", Font.PLAIN, 30));
			lblPuntajed.setBounds(26, 139, 136, 60);
			panel_derrota.add(lblPuntajed);
			
			lblNewLabeld = new JLabel("New label");
			lblNewLabeld.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabeld.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabeld.setBounds(172, 158, 117, 39);
			panel_derrota.add(lblNewLabeld);
			
			JLabel lblImpactosd = new JLabel("IMPACTOS");
			lblImpactosd.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblImpactosd.setHorizontalAlignment(SwingConstants.CENTER);
			lblImpactosd.setBounds(172, 119, 117, 28);
			panel_derrota.add(lblImpactosd);
			
			lblNewLabel_1d = new JLabel("New label");
			lblNewLabel_1d.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel_1d.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabel_1d.setBounds(299, 158, 117, 39);
			panel_derrota.add(lblNewLabel_1d);
			
			JLabel lblBalasRecibidasd = new JLabel("BALAS RECIBIDAS");
			lblBalasRecibidasd.setHorizontalAlignment(SwingConstants.CENTER);
			lblBalasRecibidasd.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblBalasRecibidasd.setBounds(299, 119, 117, 28);
			panel_derrota.add(lblBalasRecibidasd);
			
			JLabel lblTotald = new JLabel("TOTAL");
			lblTotald.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblTotald.setHorizontalAlignment(SwingConstants.CENTER);
			lblTotald.setFont(new Font("Tahoma", Font.PLAIN, 20));
			lblTotald.setBounds(426, 119, 124, 28);
			panel_derrota.add(lblTotald);
			
			lblNewLabel_2d = new JLabel("New label");
			lblNewLabel_2d.setBorder(new LineBorder(new Color(0, 0, 0)));
			lblNewLabel_2d.setHorizontalAlignment(SwingConstants.CENTER);
			lblNewLabel_2d.setBounds(426, 158, 124, 39);
			panel_derrota.add(lblNewLabel_2d);
			
			JButton btnMenuIniciald = new JButton("Menu Inicial");
			btnMenuIniciald.setBounds(26, 242, 192, 121);
			btnMenuIniciald.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					cambiarPanel(panel_derrota,panelInicial);
					boton_nuevojuego.setEnabled(false);
				}
			});
			panel_derrota.add(btnMenuIniciald);
			
			JLabel lblRecordsJuegoActuald = new JLabel("Record Juego Actual");
			lblRecordsJuegoActuald.setHorizontalAlignment(SwingConstants.CENTER);
			lblRecordsJuegoActuald.setFont(new Font("Tahoma", Font.PLAIN, 18));
			lblRecordsJuegoActuald.setBounds(275, 216, 275, 22);
			panel_derrota.add(lblRecordsJuegoActuald);
			
			editorPaned = new JEditorPane();
			editorPaned.setBounds(275, 242, 275, 40);
			panel_derrota.add(editorPaned);
			
			JLabel lblfondo = new JLabel();
			lblfondo.setBounds(0, 0, panel_derrota.getWidth(), panel_derrota.getHeight());
			lblfondo.setIcon(new ImageIcon(getClass().getResource("/Imagenes/fondos/fondo_sel_tan.jpg")));
			panel_derrota.add(lblfondo);
			
		}
		//PANEL INICIAL
		{
			panelInicial = new JPanel();
			panelInicial.setLayout(null);
			panelInicial.setBackground(Color.green);
			panelInicial.setBounds(0, 0, 600, 400);
			
			{
				JLabel ingrese_nom = new JLabel();
				ingrese_nom.setText("INGRESE SU NOMBRE");
				ingrese_nom.setFont(new Font("Tahoma", Font.BOLD, 20));
				ingrese_nom.setForeground(Color.white);
				ingrese_nom.setOpaque(true);
				ingrese_nom.setBounds(50, 300, 250, 30);
				ingrese_nom.setBackground(Color.red);
				ingrese_nom.setHorizontalAlignment(SwingConstants.CENTER);
				panelInicial.add(ingrese_nom);
			}
			{
				final JTextField jtf = new JTextField();
				jtf.setBounds(305,300,160,30);
				jtf.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent e)
					{ 
						nombre_jug_actual= jtf.getText();
						if (nombre_jug_actual.equals("")) nombre_jug_actual="Sin Nombre";
						jtf.setText("");
						boton_nuevojuego.setEnabled(true);
					}
					});
				panelInicial.add(jtf);
			}
			
			JLabel fondo_inicial = new JLabel();
			fondo_inicial.setSize(panelInicial.getWidth(),panelInicial.getHeight());
			fondo_inicial.setIcon(new ImageIcon(getClass().getResource("/Imagenes/fondos/pantalla_inicial.jpg")));
			panelInicial.add(fondo_inicial);
			
			//BOTON NUEVO JUEGO
			{
				
				boton_nuevojuego = new JGradientButton(Color.blue,Color.white);
				boton_nuevojuego.setText("NUEVO JUEGO");
				boton_nuevojuego.setBounds(50, 100, 210, 80);
				boton_nuevojuego.setForeground(Color.black);
				boton_nuevojuego.setFont(new Font("Trajan Pro 3", Font.BOLD, 20));
				boton_nuevojuego.addActionListener(new oyente_nuevojuego());
				boton_nuevojuego.setEnabled(false);
				fondo_inicial.add(boton_nuevojuego);
			}
			
			//BOTON SALIR
			{
				JButton boton_salir = new JGradientButton(Color.blue,Color.white);
				boton_salir.setText("SALIR");
				boton_salir.setBounds(50, 200, 210, 80);
				boton_salir.setForeground(Color.black);
				boton_salir.setFont(new Font("Trajan Pro 3", Font.BOLD, 20));
				boton_salir.addActionListener(new oyente_salir());
				fondo_inicial.add(boton_salir);
			}
			
			
		}
		
		//PANEL SELECCIONAR NIVEL
		{

			panel_selec_niv = new JPanel();
			panel_selec_niv.setLayout(null);
			panel_selec_niv.setBounds(0, 0, 600, 400);
			JLabel fondo_fuego = new JLabel();
			fondo_fuego.setSize(panel_selec_niv.getWidth(),panel_selec_niv.getHeight());
			fondo_fuego.setIcon(new ImageIcon(getClass().getResource("/Imagenes/fondos/fuego1.gif")));
			panel_selec_niv.add(fondo_fuego);
			
			//BOTON FACIL
			{
				JButton b_facil = new JGradientButton(Color.yellow,Color.RED);
				b_facil.setText("F A C I L");
				b_facil.setBounds(150, 60, 300, 50);
				b_facil.setForeground(Color.black);
				b_facil.setFont(new Font("Tahoma", Font.BOLD, 23));
				b_facil.addActionListener(new oyente_btnfacil());
				fondo_fuego.add(b_facil);
			}
			//BOTON INTERMEDIO
			{
				JButton b_medio = new JGradientButton(Color.yellow,Color.RED);
				b_medio.setText("I N T E R M E D I O");
				b_medio.setBounds(150, 150, 300, 50);
				b_medio.setForeground(Color.black);
				b_medio.setFont(new Font("Tahoma", Font.BOLD, 23));
				b_medio.addActionListener(new oyente_btnmedio());
				fondo_fuego.add(b_medio);
			}
			//BOTON DIFICIL 
			{
				JButton b_dificil = new JGradientButton(Color.yellow,Color.RED);
				b_dificil.setText("D I F I C I L");
				b_dificil.setBounds(150, 240, 300, 50);
				b_dificil.setForeground(Color.black);
				b_dificil.setFont(new Font("Tahoma", Font.BOLD, 23));
				b_dificil.addActionListener(new oyente_btndificil());
				fondo_fuego.add(b_dificil);
			}
			
		}
		//PANEL PARA SELECCIONAR NAVE
		{
			panel_naves = new JPanel();
			panel_naves.setLayout(null);
			panel_naves.setBounds(0,0,600,400);
			
			JLabel lblfondo = new JLabel();
			lblfondo.setBounds(0, 0, panel_naves.getWidth(), panel_naves.getHeight());
			lblfondo.setIcon(new ImageIcon(getClass().getResource("/Imagenes/fondos/fondo_sel_tan.jpg")));
			
			//LABEL DEL TEXTO "SELECCIONAR TANQUE"
			JLabel txt = new JLabel("S E L E C C I O N A R  T A N Q U E");
			txt.setHorizontalAlignment(SwingConstants.CENTER);
			txt.setBounds(80, 50, 440, 40);
			txt.setForeground(Color.WHITE);
			txt.setFont(new Font("Tahoma", Font.BOLD, 25));
			int distancia_botones_bordes=60;
			lblfondo.add(txt);
			
			//BOTON TANQUE SCHNELL
			{
				JButton boton_schnell = new JButton();
				boton_schnell.setBounds(distancia_botones_bordes,120,200,200);
				boton_schnell.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Naves/tanques/schnell/Schnell Tank_boton.png")));
				boton_schnell.setFocusable(false);
				boton_schnell.addActionListener(new oyente_btn_schnell());
				
				JLabel labelschnell = new JLabel("Schnell Tank");
				labelschnell.setHorizontalAlignment(SwingConstants.CENTER);
				labelschnell.setFont(new Font("Tahoma", Font.BOLD, 20));
				labelschnell.setForeground(Color.white);
				labelschnell.setSize(boton_schnell.getWidth(),50);
				//posiciones del label (abajo del boton)
				int posx = (int) boton_schnell.getLocation().getX();
				int posy = (int) (boton_schnell.getLocation().getY()+boton_schnell.getHeight());
				labelschnell.setLocation(posx,posy);
				
				lblfondo.add(labelschnell);
				lblfondo.add(boton_schnell);
				
			}
			
			//BOTON TANQUE MBT
			{
				JButton boton_MBT = new JButton();
				boton_MBT.setSize(200, 200);
				boton_MBT.setLocation(panel_naves.getWidth()-boton_MBT.getWidth()-distancia_botones_bordes,120);
				boton_MBT.setIcon(new ImageIcon(getClass().getResource("/Imagenes/Naves/tanques/mbt/MBT-2000_BOTON.png")));
				boton_MBT.setFocusable(false);
				boton_MBT.addActionListener(new oyente_btn_mbt());
				
				JLabel labelmbt = new JLabel("MBT 2000");
				labelmbt.setHorizontalAlignment(SwingConstants.CENTER);
				labelmbt.setFont(new Font("Tahoma", Font.BOLD, 20));
				labelmbt.setForeground(Color.white);
				labelmbt.setSize(boton_MBT.getWidth(),50);
				//posiciones del label (abajo del boton)
				int posx = (int) boton_MBT.getLocation().getX();
				int posy = (int) (boton_MBT.getLocation().getY()+boton_MBT.getHeight());
				labelmbt.setLocation(posx,posy);
				
				lblfondo.add(labelmbt);
				lblfondo.add(boton_MBT);
			}
			
			
			
			panel_naves.add(lblfondo);
			

		}
		
		
	}
	
	/**
	 * cambia panel 1 por panel 2
	 * @param panel1 panel a cambiar
	 * @param panel2 panel nuevo
	 */
	protected void cambiarPanel(JPanel panel1, JPanel panel2) {
		getContentPane().remove(panel1);
		new explode(contentPane, panel2).play(); //usa efecto explode
	}
	
	
	/**
	 * cierra el juego
	 */
	public void cerrarframe()
	{
		System.exit(0);
	}
	
	/**
	 * crea un nuevo juego con su tanque y dificultad correspondiente
	 */
	public void Nuevo_Juego()
	{
		new Juego(this,dificultad,tanque);
	}
	
	/**
	 * muestra el record del juego actual en pantalla
	 */
	public void mostrar_record()
	{
		editorPaned.setText("Nombre : "+nombre_record+"\n"
							+ "Puntaje : "+puntaje_record);
		editorPane.setText("Nombre : "+nombre_record+"\n"
							+ "Puntaje : "+puntaje_record);
		
	}
	
	/**
	 * pantalla cuando un jugador gana
	 * @param pts puntos que acumulo
	 * @param disp puntos que se restan por disparos recibidos
	 */
	public void victoria(int pts, int disp)
	{
		this.getContentPane().removeAll();
		lblNewLabel.setText(String.valueOf(pts));
		lblNewLabel_1.setText(String.valueOf(disp));
		lblNewLabel_2.setText(String.valueOf(pts-disp));
		this.getContentPane().add(panel_victoria);
		this.getContentPane().repaint();
		if ((pts-disp)>puntaje_record)
		{
			puntaje_record=pts-disp;
			nombre_record= nombre_jug_actual;
			
		} 
			mostrar_record();
		
	}
	
	/**
	 * pantalla cuando un jugador pierde
	 * @param pts puntos que acumulo
	 * @param disp puntos que se restan por disparos recibidos
	 */
	public void derrota(int pts, int disp)
	{
		this.getContentPane().removeAll();
		lblNewLabeld.setText(String.valueOf(pts));
		lblNewLabel_1d.setText(String.valueOf(disp));
		lblNewLabel_2d.setText(String.valueOf(pts-disp));
		this.getContentPane().add(panel_derrota);
		this.getContentPane().repaint();
		if ((pts-disp)>puntaje_record)
		{
			puntaje_record=pts-disp;
			nombre_record= nombre_jug_actual;
			
		} 
			mostrar_record();
		
	}
	
	//OYENTES DE EVENTOS
	
	/**Oyente del boton nuevo juego del panel inicial
	 * 
	 * @author Javier
	 *
	 */
	private class oyente_nuevojuego implements ActionListener
	{

		@Override
		public void actionPerformed(ActionEvent e) 
		{
			
			cambiarPanel(panelInicial,panel_selec_niv);
			//getContentPane().repaint();
		}
		
	}
	
	/**Oyente del boton salir del panel inicial
	 * 
	 * @author Javier
	 *
	 */
	private class oyente_salir implements ActionListener
	{

		@Override
		public void actionPerformed(ActionEvent e) 
		{
			cerrarframe();
		}
		
	}
	
	
	/**Oyente del boton facil, del panel de seleccionar nivel
	 * 
	 * @author Javier
	 *
	 */
	private class oyente_btnfacil implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) 
		{
			dificultad = 1;
			cambiarPanel(panel_selec_niv,panel_naves);
		}
	}
	
	/**Oyente del boton intermedio, del panel de seleccionar nivel
	 * 
	 * @author Javier
	 *
	 */
	private class oyente_btnmedio implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) 
		{
			dificultad = 2;
			cambiarPanel(panel_selec_niv,panel_naves);
		}
	}
	
	/**Oyente del boton dificil, del panel de seleccionar nivel
	 * 
	 * @author Javier
	 *
	 */
	private class oyente_btndificil implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) 
		{
			dificultad = 3;
			cambiarPanel(panel_selec_niv,panel_naves);
		}
	}
	
	private class oyente_btn_schnell implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) 
		{
			tanque=2;
			Nuevo_Juego();
		}
	}
	
	private class oyente_btn_mbt implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) 
		{
			tanque=1;
			Nuevo_Juego();
		}
	}
	

}
